#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>

#define MAX_SIZE 64
char input_str[MAX_SIZE];
int input = 1;
char *split_str[MAX_SIZE];
void split(char *str, int sz)
{
    int i = 0;
    for (i = 1, split_str[0] = strtok(str, " "); split_str[i - 1]; ++i)
    {
        split_str[i] = strtok(NULL, " ");
    }
}

void exe(char *str[])
{
    pid_t pid = fork();
    if (pid < 0)
    {
        perror("fork()");
        exit(50);
    }
    else if (pid > 0)
    {
        int status = 0;
        pid_t id = waitpid(pid, &status, 0);
        if (WIFEXITED(status) == 0)
        {
            printf("异常退出\n");
            return;
        }
    }
    else
    {
        // 子进程完成指令

        execvp(split_str[0], split_str);
        exit(40);
    }
}

int main()
{
    while (input)
    {

        printf("[%s@%s %s]", getenv("USER"), getenv("HOSTNAME"), getenv("PWD"));
        // 读取用户输入
        char *s = fgets(input_str, MAX_SIZE, stdin);
        if (s == NULL)
            continue;
        size_t sz = strlen(s);
        s[sz - 1] = '\0';

        // 分割字符串
        split(input_str, sz);

        // 特判内建命令
        //
        //

        // 创建子进程完成指令
        exe(split_str);

        // Debug
        // printf("%zd",sz);

        // int i=0;
        // for(i=0;split_str[i];++i)
        //{
        //     printf("%s ",split_str[i]);
        // }
    }

    return 0;
}
